// 方法1
// type First<T extends any[]> = T extends [] ? never : T[0];

// 方法2
// type First<T extends any[]> = T["length"] extends 0 ? never : T[0];

// 方法3 T[number] 遍历数组的所有项
// type First<T extends any[]> = T[0] extends T[number] ? T[0] : never;

// 方法4
type First<T extends any[]> = T extends [infer First, ...infer Rest]
  ? First
  : never;

// T[number]
type ages = [1, 2, 3];

// union
type t1 = ages[number];

// 看看 某个值是不是在union
type t2 = 1 extends ages[number] ? true : false;

// 知识点
// 1. extends 类型条件判断
// 2. 获取tuple的length属性
// 3. extends union 判断规则
// 4. infer的时候用
// T[0] 获取类型数组的第一个元素
